package com.bonc.cq.cloud.config;

import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RetryRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 *  封装了7种负载均衡算法
 *  1.BestAvailableRule：选择一个最小的并发请求的server
 　　2.AvailabilityFilteringRule：过滤掉那些因为一直连接失败的被标记为circuit tripped的后端server，并过滤掉那些高并发的的后端server（active connections 超过配置的阈值）
 　　3.WeightedResponseTimeRule：根据相应时间分配一个weight，相应时间越长，weight越小，被选中的可能性越低。
 　　4.RetryRule：对选定的负载均衡策略机上重试机制。（RoundRobinRule的加强版，在轮训时发现某些服务无法连接，如果这些服务超过了设定的连接数，之后就会跳过这些服务进行轮训）
 　　5.RoundRobinRule：轮训（ribbon默认的算法）
 　　6.RandomRule：随机选中一个server
 　　7.ZoneAvoidanceRule：复合判断server所在区域的性能和server的可用性选择server
 */
@Configuration
public class LoadBalancedRul {
    @Bean
    public IRule ribbonRule() {
//        return new RoundRobinRule();                //轮训
       // return new WeightedResponseTimeRule();    //加权权重
       return new RetryRule();                    //带有重试机制的轮训
       //return new RandomRule();                   //随机
       //return new TestRule();                     //自定义规则
    }
}
